package cn.tedu.csmall.product.service.impl;


import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.AttributeMapper;
import cn.tedu.csmall.product.mapper.AttributeTemplateMapper;
import cn.tedu.csmall.product.mapper.CategoryAttributeTemplateMapper;
import cn.tedu.csmall.product.mapper.SpuMapper;
import cn.tedu.csmall.product.pojo.dto.AttributeTemplateDTO;
import cn.tedu.csmall.product.pojo.dto.AttributeTemplateUpdateInfoDTO;
import cn.tedu.csmall.product.pojo.dto.BrandUpdateDTO;
import cn.tedu.csmall.product.pojo.entity.AttributeTemplate;
import cn.tedu.csmall.product.pojo.entity.Brand;
import cn.tedu.csmall.product.pojo.vo.AttributeListItemVO;
import cn.tedu.csmall.product.pojo.vo.AttributeStandardVO;
import cn.tedu.csmall.product.pojo.vo.AttributeTemplateListItemVO;
import cn.tedu.csmall.product.pojo.vo.AttributeTemplateStandardVO;
import cn.tedu.csmall.product.service.IAttributeTemplateService;
import cn.tedu.csmall.product.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


/**
 * 处理属性模板数据的业务实现类
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */

@Slf4j
@Service
public class AttributeTemplateService implements IAttributeTemplateService {

    @Autowired
    private AttributeTemplateMapper attributeTemplateMapper;
    @Autowired
    private AttributeMapper attributeMapper;
    @Autowired
    private CategoryAttributeTemplateMapper categoryAttributeTemplateMapper;
    @Autowired
    private SpuMapper spuMapper;

    public AttributeTemplateService(){
        log.debug("创建业务对象：AttributeTemplateService");
    }

    @Override
    public void addNew(AttributeTemplateDTO attributeTemplateDTO){
        log.debug("从现在开始处理【添加属性模板】的业务，属性参数{}",attributeTemplateDTO);
        //从参数对象中获取名字
        String name = attributeTemplateDTO.getName();
        //判断数据库中是否有这个名字
        int count = attributeTemplateMapper.countByName(name);
        if (count>0){
            String message = "属性模板名称已经被占用，添加属性模板失败";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }

        AttributeTemplate attributeTemplate = new AttributeTemplate();
        BeanUtils.copyProperties(attributeTemplateDTO,attributeTemplate);
        log.debug("即将插入数据");
        int rows = attributeTemplateMapper.insert(attributeTemplate);
        if (rows != 1 ){
            String message = "添加属性模版失败,服务器忙稍后再试";
            log.debug(message);
            throw  new ServiceException(ServiceCode.ERR_INSERT,message);
        }
        log.debug("插入数据完成");
    }

    @Override
    public void delete(Long id){
        log.debug("从现在开始处理【删除属性模板】的业务，属性参数{}",id);
        AttributeTemplateStandardVO standardById = attributeTemplateMapper.getStandardById(id);
        if (standardById==null){
            String message= "删除属性模版失败,尝试删除的数据不存在";
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }

        int count = attributeMapper.countByTemplateId(id);
        if (count > 0 ){
            String message="删除失败,此属性模版和属性关联";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }

        int counts = categoryAttributeTemplateMapper.countByTemplateId(id);
        if (counts > 0 ){
            String message="删除失败,此属性模版和类别关联";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }

        int c =spuMapper.countByAttributeTemplateId(id);
        if (c > 0 ){
            String message="删除失败,此属性模版和SPU关联";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }

        int rows = attributeTemplateMapper.deleteById(id);
        if (rows != 1 ){
            String message = "删除属性模版失败,服务器忙稍后再试";
            log.debug(message);
            throw  new ServiceException(ServiceCode.ERR_DELETE,message);
        }
    }

    @Override
    public List<AttributeTemplateListItemVO> list(){
        log.debug("开始处理查询属性模版业务");
        return attributeTemplateMapper.list();
    }

    @Override
    public AttributeTemplateStandardVO selectById(Long id){
        log.debug("开始处理根据id查看详情的服务");
        AttributeTemplateStandardVO standardById = attributeTemplateMapper.getStandardById(id);
        if (standardById == null){
            String message = "别瞎查,没有这个id";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        return standardById;
    }

    @Override
    public void update(AttributeTemplateUpdateInfoDTO attributeTemplateUpdateInfoDTO){
        log.debug("开始修改详情");

        String name = attributeTemplateUpdateInfoDTO.getName();
        int rows = attributeTemplateMapper.countByName(name);
        if (rows >= 1){
            String message = "修改失败,名字已存在";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND,message);
        }
        AttributeTemplate attributeTemplate = new AttributeTemplate();
        BeanUtils.copyProperties(attributeTemplateUpdateInfoDTO,attributeTemplate);
        rows = attributeTemplateMapper.updateById(attributeTemplate);
        if (rows != 1){
            String message = "修改失败,服务器繁忙";
            log.debug(message);
            throw new ServiceException(ServiceCode.ERR_CONFLICT,message);
        }
    }

}
